Congestion in a network link occurs whenever the amount of offered traffic exceeds its capacity. Buffering resources are often used to accommodate the transient excess traffic and to preserve reasonable utilization of the communication link. Buffering resources in a store-and-forward device, such as a packet switch or router, are typically structured as one or more queues. When there is transient overload due to bursty traffic, a queue could be filled up to its maximum queue length and incoming packets could be subject to a large queuing delay. In addition, the chance that several consecutive packets are dropped due to buffer overflow is high.
Several passive queue management (PQM) approaches have been attempted or proposed to better manage congestion problems in the queues of store-and-forward devices. Unfortunately, in most PQM approaches, such as tail drop, LQD (Longest Queue Drop) and RND (Dynamic Soft Partitioning with Random Drop), bursty flows result in inefficient handling of flows because of the reactive nature of PQM.
In contrast, active queue management (AQM) is a proactive approach to queue management, wherein packets may be dropped before a queue becomes full to avoid congestion. Existing AQM schemes, such as RED (Random Early Detection) and its variations, SRED (Stabilized RED) and CHOKe (CHOose to Keep for responsive flows, CHOose to Kill for non-responsive flows) and BLUE are typically designed to respond early, yet gradually, with onset of congestion, so that packet marking/dropping is not concentrated on a burst of consecutive arrivals, either from a single source or a plurality of sources. This is intended to enhance fairness to bursty traffic as well as to minimize the chance of synchronizing the reaction of responsive flows, such as TCP (Transmission Control Protocol) flows. Unfortunately, these schemes tend to be sluggish upon decline of congestion. As a result, there is unnecessary marking/dropping of packets in the event of congestion decline, and throughput is accordingly limited.
Few existing AQM schemes have been designed for managing per-flow queues to provide isolation among flows so that misbehaving flows may be identified and be subject to punitive measures. Existing AQM schemes that have been originally designed for managing aggregate queues may be used to support per-flow queue management, but are not scalable enough to support systems with a large number of flows. Some that have been designed for managing per-flow queues are also not scalable because they tend to require excessive memory and computation overhead, while others are not very effective in avoiding marking/dropping of consecutive arrivals because there is not sufficient hysteresis in their packet marking/dropping mechanisms.